﻿using System;
using System.Collections.Generic;
using System.Text;

namespace DIProject.Util
{
    public class Convert
    {
        public static decimal? ToDecimal(object obj)
        {
            decimal? result = null;
            if (System.Convert.IsDBNull(obj))
                return result;
            if (obj == null)
                return result;
            if (obj is decimal)
            {
                result = (decimal)obj;
                return result;
            }
            if (obj is string)
            {
                
                string str = obj as string;
                if (string.IsNullOrEmpty(str))
                    return result;
                decimal d; 
                str = str.Replace(',','.');
                if(decimal.TryParse(str,System.Globalization.NumberStyles.Number,System.Globalization.CultureInfo.InvariantCulture, out d))
                {
                    result = d;
                    return result;
                }                
            }
            throw new Util.DIException("Объект нельзя конвертировать в тип decimal");            
        }
        public static double? ToDouble(object obj)
        {
            double? result = null;
            if (System.Convert.IsDBNull(obj))
                return result;
            if (obj == null)
                return result;
            if (obj is double)
            {
                result = (double)obj;
                return result;
            }
            if (obj is string)
            {
                string str = obj as string;
                str = str.Replace(',', '.');
                double d;
                if (string.IsNullOrEmpty(str))
                    return result;
                if (double.TryParse(str, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out d))
                {
                    result = d;
                    return result;
                }
            }
            throw new Util.DIException("Объект нельзя конвертировать в тип double");
        }
        public static Int32? ToInt32(object obj)
        {
            Int32? result = null;
            if (System.Convert.IsDBNull(obj))
                return result;
            if (obj == null)
                return result;
            if (obj is Int32)
            {
                result = (Int32)obj;
                return result;
            }
            if (obj is string)
            {
                string str = obj as string;
                if (string.IsNullOrEmpty(str))
                    return result;
                Int32 d;
                if (Int32.TryParse(str, out d))
                {
                    result = d;
                    return result;
                }
            }
            throw new Util.DIException("Объект нельзя конвертировать в тип Int32");
        }
        public static DateTime? ToDateTime(object obj)
        {
            DateTime? result = null;
            if (System.Convert.IsDBNull(obj))
                return result;
            if (obj == null)
                return result;
            if (obj is DateTime)
            {
                result = (DateTime)obj;
                return result;
            }
            if (obj is string)
            {
                string str = obj as string;
                if (string.IsNullOrEmpty(str))
                    return result;
                DateTime d;
                if (DateTime.TryParse(str, out d))
                {
                    result = d;
                    return result;
                }
            }
            throw new Util.DIException("Объект нельзя конвертировать в тип Int32");
        }
    }
}
